#ifndef GY_QTTIMER_H
#define GY_QTTIMER_H
#include<QTimer>
#include<QDate>
#include<QMutex>
#include"GY_ControlLibrary_global.h"
//一天微妙数
#define ONE_DATE_MICROSECOND  86400000000
/**
 * @brief The GY_QtTimer class
 * 基于QT计时器的计时器类
 */
class GY_CONTROLLIBRARY_EXPORT GY_QtTimer:public QObject
{
    Q_OBJECT
public:
    explicit GY_QtTimer(QObject *parent = nullptr);
    /**
     * @brief getCurrentTime 获取当前时间
     * @return 返回当前计时时间
     */
    quint64 getCurrentTime();
    /**
     * @brief setCurrentTime 设置当前时间
     * @param time 当前时间
     */
    void setCurrentTime(const quint64 time);
    /**
     * @brief getCurrentDate  获取当前日期
     * @return 返回日期
     */
    QDate getCurrentDate();
    /**
     * @brief setCurrentDate 设置当前日期
     * @param date 日期
     */
    void setCurrentDate(const QDate & date);
    /**
     * @brief startTimer 开始计时
     * @param timeInter 计时器间隔
     */
    void startTimer(const qint32 timeInter);
    /**
     * @brief stopTimer
     * 停止计时器
     */
    void stopTimer();
    /**
     * @brief setTimerSpeed  设置计时器速率
     * @param timeSpeed 计时速率
     */
    void setTimerSpeed(const double timeSpeed);
private:
    //!使用到的QT定时器
    QTimer m_Timer;
    //!当前时间(单位:us)
    qint64 m_CurrentTime;
    //!当前日期
    QDate m_CurrentDate;
    //!计时速率
    double m_TimeSpeed;
    //!时间互斥锁
    QMutex m_TimeMutex;
    //!日期互斥锁
    QMutex m_DateMutex;
    //!间隔时间(单位:us)
    qint64 m_TimeInter;
private:
    void timeOutEvent();
signals:
    void timeOutSiganl(const QDate currentDate,const qint64 currentTime);
};

#endif // GY_QTTIMER_H
